From 103f4e16700d4e61e5dfac462029a392f82b65b8 Mon Sep 17 00:00:00 2001 From: "mjw@wray-m-3.hpl.hp.com" Date: Tue, 10 Aug 2004 13:50:46 +0000 Subject: [PATCH] bitkeeper revision 1.1159.14.4 (4118d2b68g453DSG6YDQBLmCyvKVgA) Sundry fixes to domain restore. --- tools/python/xen/xend/XendDomain.py | 2 +- tools/python/xen/xend/XendDomainInfo.py | 11 ++++++----- tools/python/xen/xm/main.py | 3 +++ tools/xfrd/xen_domain.c | 3 +++ 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/tools/python/xen/xend/XendDomain.py b/tools/python/xen/xend/XendDomain.py index 7ae079734f..ca9cdb25ed 100644 --- a/tools/python/xen/xend/XendDomain.py +++ b/tools/python/xen/xend/XendDomain.py @@ -375,7 +375,7 @@ class XendDomain: def cbok(dominfo): self._add_domain(dominfo) return dominfo - deferred = dominfo.construct(config) + deferred = dominfo.dom_construct(dominfo.dom, config) deferred.addCallback(cbok) return deferred diff --git a/tools/python/xen/xend/XendDomainInfo.py b/tools/python/xen/xend/XendDomainInfo.py index 056a171fc2..1849db0a8d 100644 --- a/tools/python/xen/xend/XendDomainInfo.py +++ b/tools/python/xen/xend/XendDomainInfo.py @@ -295,7 +295,6 @@ def vm_restore(src, progress=0): raises VmError for invalid configuration """ vm = XendDomainInfo() - vm.restore = 1 ostype = "linux" #todo Set from somewhere (store in the src?). restorefn = getattr(xc, "%s_restore" % ostype) d = restorefn(state_file=src, progress=progress) @@ -304,11 +303,10 @@ def vm_restore(src, progress=0): raise VmError('restore failed') try: vmconfig = sxp.from_string(d['vmconfig']) - vm.config = sxp.child_value(vmconfig, 'config') + config = sxp.child_value(vmconfig, 'config') except Exception, ex: raise VmError('config error: ' + str(ex)) - deferred = vm.dom_construct(dom) - vm.restore = 0 + deferred = vm.dom_construct(dom, config) def vifs_cb(val, vm): vif_up(vm.ipaddrs) deferred.addCallback(vifs_cb, vm) @@ -930,7 +928,7 @@ class XendDomainInfo: d.addCallback(_vm_configure1, self) return d - def dom_construct(self, dom): + def dom_construct(self, dom, config): """Construct a vm for an existing domain. @param dom: domain id @@ -940,6 +938,8 @@ class XendDomainInfo: if not d: raise VmError("Domain not found: %d" % dom) try: + self.config = config + self.restore = 1 self.setdom(dom) self.name = d['name'] self.memory = d['memory']/1024 @@ -948,6 +948,7 @@ class XendDomainInfo: self.destroy() return err deferred.addErrback(cberr) + self.restore = 0 except StandardError, ex: self.destroy() raise diff --git a/tools/python/xen/xm/main.py b/tools/python/xen/xm/main.py index 881434a39e..16cdc0bdbb 100644 --- a/tools/python/xen/xm/main.py +++ b/tools/python/xen/xm/main.py @@ -290,6 +290,9 @@ class ProgRestore(Prog): savefile = os.path.abspath(args[1]) info = server.xend_domain_restore(savefile) PrettyPrint.prettyprint(info) + id = sxp.child_value(info, 'id') + if id is not None: + server.xend_domain_unpause(id) xm.prog(ProgRestore) diff --git a/tools/xfrd/xen_domain.c b/tools/xfrd/xen_domain.c index e1dacb333f..7125893998 100644 --- a/tools/xfrd/xen_domain.c +++ b/tools/xfrd/xen_domain.c @@ -127,6 +127,9 @@ int xen_domain_rcv(IOStream *io, uint32_t *dom, char **vmconfig, int *vmconfig_n ioctxt->err = iostderr; err = xc_linux_restore(xcinit(), ioctxt); + *dom = ioctxt->domain; + *vmconfig = ioctxt->vmconfig; + *vmconfig_n = ioctxt->vmconfig_n; #endif dprintf("< err=%d\n", err); return err; -- 2.30.2